﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Import
using ddcCajamarca.Repository.Documentos.Service;
using ddcCajamarca.BusinessEntities.Documentos;
using System.Data.Entity;

namespace ddcCajamarca.Repository.Documentos
{
    public class RDocumentoRepository : MasterRepository, IRDocumentoRepository
    {

        public RDocumento GetFromRDocumentoById(int id)
        {
            var query = from p in Context.RDocumentos.Include("TramiteDocumentario")
                            .Include("DetalleRegistros.Area")
                        where p.Id.Equals(id)
                        select p;

            return query.SingleOrDefault();
        }

        public List<RDocumento> GetRDocumentoByCriterio(string criterio)
        {
            var query = from c in Context.RDocumentos
                        select c;

            if (criterio != "" && criterio != null)
            {
                query = from c in query
                        where c.NroExpediente.StartsWith(criterio) ||
                        c.Recurrente.ToUpper().Contains(criterio.ToUpper())
                        select c;
            }
            return query.ToList();
        }
        public List<RDocumento> GetAllFromRDocumentoByCriterioAndFechas(string criterio, DateTime? fechIni, DateTime? fechFin)
        {
            var query = from p in Context.RDocumentos
                        .Include("TramiteDocumentario")
                        select p;

            if (criterio != " " && criterio != null && criterio != string.Empty)
            {
                query = from p in query
                        where
                              p.NroExpediente.StartsWith(criterio) ||
                              p.Recurrente.ToUpper().Contains(criterio.ToUpper())                             
                        select p;
            }
            else if (fechIni.HasValue && fechFin.HasValue)
            {
                query = from p in query
                        where p.Fecha >= fechIni && p.Fecha <= fechFin
                        select p;
            }

            return query.ToList();
        }
        public List<RDocumento> GetAllFromRDocumentos()
        {
            var query = from t in Context.RDocumentos
                        select t;

            return query.ToList();
        }

        public void AddRDocumento(RDocumento rdocumento)
        {
            try
            {
                var query = Context.Database.SqlQuery<RDocumento>("exec dbo.NewOrEditRDocumento @Id = '"
                + rdocumento.Id + "', @NroExpediente = '"
                + rdocumento.NroExpediente + "', @Folios = '"
                + rdocumento.Folios + "', @Usuario = '"
                + rdocumento.Usuario + "', @sunto = '"
                + rdocumento.Asunto + "', @Recurrente = '"
                + rdocumento.Recurrente + "', @Estado = '"
                + rdocumento.Estado + "', @AreaEstado = '"
                + rdocumento.AreaEstado + "', @Entregado = '"
                + rdocumento.Entregado + "', @Dni = '"
                + rdocumento.Dni + "', @Oficio = '"
                + rdocumento.Oficio + "', @TramiteDocumentarioId = '"
                + rdocumento.TramiteDocumentarioId + "'").SingleOrDefault();

                rdocumento.Id = query.Id;

                foreach (var detalle in rdocumento.DetalleRegistros)
                {
                    Context.Database.ExecuteSqlCommand("exec dbo.NewDetalleMovimientos @IdRDocumento = '"
                        + rdocumento.Id + "', @IdArea = '"
                        + detalle.IdArea + "', @Movimientos = '"
                        + detalle.Movimientos + "', @Emisor = '"
                        + detalle.Emisor + "', @Receptor = '"
                        + detalle.Receptor + "', @Atiende = '"
                        + detalle.Atiende + "', @Recibido = '"
                        + detalle.Recibido + "', @Observacion = '"
                        + detalle.Observacion + "', @AreaDest = '"
                        + detalle.AreaDest + "', @Atendido = '"
                        + detalle.Atendido + "', @Observacion2 = '"
                        + detalle.Observacion2 + "', @Observacion3 = '"
                        + detalle.Observacion3 + "'");
                }
            }
            catch (Exception)
            {

            }
            
        }

        public void UpdateRDocumento(RDocumento rdocumento)
        {
            try
            {
                Context.Database.ExecuteSqlCommand("dbo.DeleteDetalleMovimientos @idRDocumento = '"
                + rdocumento.Id + "'");

                foreach (var detalle in rdocumento.DetalleRegistros)
                {
                    Context.Database.ExecuteSqlCommand("exec dbo.UpdateDetalleMovimientos @IdRDocumento = '"
                        + rdocumento.Id + "', @IdArea = '"
                        + detalle.IdArea + "', @Movimientos = '"
                        + detalle.Movimientos + "', @Emisor = '"
                        + detalle.Emisor + "', @Receptor = '"
                        + detalle.Receptor + "', @Atiende = '"
                        + detalle.Atiende + "', @FechDerivDocum = '"
                        + detalle.FechDerivDocum + "', @Recibido = '"
                        + detalle.Recibido + "', @FechRecepDocum = '"
                        + detalle.FechRecepDocum + "', @Observacion = '"
                        + detalle.Observacion + "', @AreaDest = '"
                        + detalle.AreaDest + "', @Atendido = '"
                        + detalle.Atendido + "', @FechAtenDocum = '"
                        + detalle.FechAtenDocum + "', @Observacion2 = '"
                        + detalle.Observacion2 + "', @Observacion3 = '"
                        + detalle.Observacion3 + "'");
                }

                var query = Context.Database.SqlQuery<RDocumento>("exec dbo.NewOrEditRDocumento @Id = '"
                    + rdocumento.Id + "', @NroExpediente = '"
                    + rdocumento.NroExpediente + "', @Folios = '"
                    + rdocumento.Folios + "', @Usuario = '"
                    + rdocumento.Usuario + "', @sunto = '"
                    + rdocumento.Asunto + "', @Recurrente = '"
                    + rdocumento.Recurrente + "', @Estado = '"
                    + rdocumento.Estado + "', @AreaEstado = '"
                    + rdocumento.AreaEstado + "', @Entregado = '"
                    + rdocumento.Entregado + "', @Dni = '"
                    + rdocumento.Dni + "', @Oficio = '"
                    + rdocumento.Oficio + "', @TramiteDocumentarioId = '"
                    + rdocumento.TramiteDocumentarioId + "'").SingleOrDefault();

                rdocumento.Id = query.Id;
            }
            catch (Exception)
            {

            }
            
        }

    }
}
